//! 配置系统示例

use unichar::{Unichar, Config, Style};

fn main() {
    println!("=== Unichar 配置系统示例 ===\n");

    // 1. 创建自定义配置
    let custom_config = Config::new()
        .with_style(Style::Icon)
        .with_color(true)
        .add_alias("ok".to_string(), "success".to_string())
        .add_alias("fail".to_string(), "error".to_string());

    let mut unichar = Unichar::with_config(custom_config);
    
    println!("1. 自定义配置:");
    println!("   成功: {}", unichar.get("success").unwrap_or("未找到"));
    println!("   错误: {}", unichar.get("error").unwrap_or("未找到"));
    println!("   别名 ok: {}", unichar.get("ok").unwrap_or("未找到"));
    println!("   别名 fail: {}", unichar.get("fail").unwrap_or("未找到"));
    println!();

    // 2. 保存配置到JSON
    println!("2. 保存配置到JSON:");
    match unichar.save_config_to_json() {
        Ok(json) => {
            println!("配置JSON:");
            println!("{}", json);
        }
        Err(e) => println!("保存配置失败: {}", e),
    }
    println!();

    // 3. 从JSON加载配置
    println!("3. 从JSON加载配置:");
    let json_config = r#"{
  "style": "Simple",
  "enable_color": false,
  "enable_ansi": true,
  "custom_styles": {},
  "aliases": {
    "ok": "success",
    "fail": "error"
  }
}"#;

    match unichar.load_config_from_json(json_config) {
        Ok(_) => {
            println!("配置加载成功!");
            println!("   当前样式: {:?}", unichar.config().style);
            println!("   启用颜色: {}", unichar.config().enable_color);
            println!("   别名数量: {}", unichar.config().aliases.len());
        }
        Err(e) => println!("加载配置失败: {}", e),
    }
    println!();

    // 4. 配置文件操作
    println!("4. 配置文件操作:");
    let config_file = "example_config.json";
    
    // 保存配置到文件
    match unichar.save_config_to_file(config_file) {
        Ok(_) => println!("配置已保存到文件: {}", config_file),
        Err(e) => println!("保存配置到文件失败: {}", e),
    }

    // 从文件加载配置
    let mut new_unichar = Unichar::new();
    match new_unichar.load_config_from_file(config_file) {
        Ok(_) => {
            println!("从文件加载配置成功!");
            println!("   样式: {:?}", new_unichar.config().style);
            println!("   别名 ok: {}", new_unichar.get("ok").unwrap_or("未找到"));
        }
        Err(e) => println!("从文件加载配置失败: {}", e),
    }

    // 清理文件
    let _ = std::fs::remove_file(config_file);
    println!();

    // 5. 样式回退演示
    println!("5. 样式回退演示:");
    let mut unichar = Unichar::new();
    
    // 设置图标样式，但某些字符可能没有图标版本
    unichar.set_config(Config::new().with_style(Style::Icon));
    
    println!("使用图标样式，带回退:");
    let chars = ["success", "error", "warning", "info", "star"];
    for char_name in chars {
        if let Some(char) = unichar.get_with_fallback(char_name) {
            println!("   {}: {}", char_name, char);
        } else {
            println!("   {}: 未找到", char_name);
        }
    }
    println!();

    // 6. 预设配置演示
    println!("6. 预设配置演示:");
    
    let configs = [
        ("终端配置", unichar::terminal()),
        ("富文本配置", unichar::rich()),
        ("简洁配置", unichar::minimal()),
        ("开发配置", unichar::development()),
    ];

    for (name, config) in configs {
        println!("{}: 样式={:?}, 颜色={}, ANSI={}", 
                name, 
                config.config().style,
                config.config().enable_color,
                config.config().enable_ansi);
    }
}
